package com.qf.service.impl;

import com.qf.constant.CacheConstants;
import com.qf.constant.OperatorConstants;
import com.qf.feign.CacheFeign;
import com.qf.model.StandardSubmit;
import com.qf.service.FilterChainService;
import com.qf.util.CheckMobileOperator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.Set;

/**
 * 过滤器 之 号段补全
 *
 * @author lixu
 */
@Service("phase")
public class PhaseFilterServiceImpl implements FilterChainService {


    @Autowired
    private CacheFeign cacheFeign;

    /**
     * 号段补全
     * <p>
     * **号段补全 :
     * **从号段表中查询手机所在区域补全手机号段信息，号段信息可从REDIS缓存中取，找不到号段信息就填0，表示未知。
     *
     * @param submit
     * @return
     */
    @Override
    public boolean strategy(StandardSubmit submit) {
        //共6个属性的值 号段补全
        //1:根据手机号 查询手机所有省及市
        String destMobile = submit.getDestMobile();
        //2:根据手机前7位查询省与市 的ID
        String cacheKey = CacheConstants.CACHE_PREFIX_PHASE + destMobile.substring(0, 7);
        String value = cacheFeign.get(cacheKey);//"11,86"
        if (StringUtils.isEmpty(value)) {
            // 0,0  未知
            submit.setProvinceId(0);
            submit.setCityId(0);
        } else {
            String[] v = value.split(",");
            submit.setProvinceId(Integer.parseInt(v[0]));
            submit.setCityId(Integer.parseInt(v[1]));
        }

        //3:运营商     0 - 未知,1 - 移动, 2 - 联通 ,3 - 电信
        // 判断是否是移动。。。
        if (CheckMobileOperator.isChinaMobilePhoneNum(destMobile)) {
            submit.setOperatorId(OperatorConstants.CHINA_MOBILE);//运营商的类型
            // 判断是否是联通。。
        } else if (CheckMobileOperator.isChinaUnicomPhoneNum(destMobile)) {
            submit.setOperatorId(OperatorConstants.CHINA_UNICOM);
            // 判断是否是电信。。。
        } else if (CheckMobileOperator.isChinaTelecomPhoneNum(destMobile)) {
            submit.setOperatorId(OperatorConstants.CHINA_TELECOM);
        } else {
            //未知
            submit.setOperatorId(OperatorConstants.CHINA_UNKNOWN);
        }
        //4: 下发网关ID号   1   （通道ID）  t_channel
        String channelCacheKey = CacheConstants.CACHE_PREFIX_SMS_CHANNEL + "*";
        Set<String> channelSets = cacheFeign.keys(channelCacheKey);
        // CHANNEL:3
        for (String channelSet : channelSets) {
            if(channelSet.startsWith(
                    CacheConstants.CACHE_PREFIX_SMS_CHANNEL + submit.getOperatorId())){
                String[] split = channelSet.split(":");
                submit.setGatewayID(Integer.parseInt(split[2]));
            }
        }
        //号段补全策略实现   需要使用spNumber（channel表） + extendNumber（client_channel表）
        //   1069886(运营商) + (企业） = 某京
        //下发的源号码      10698888888    1069777777   icbc银行给同学们发短信  银行的号码是多少呢
        //发短信   发的一方 10086  11888  10655955      收的一方
        // 收短信的一方 13810567801,13810567802,13810567803,13810567804,13810567805,13810567806
        //CHANNEL:0:4   0:运营商的类型ID  4：通道ID
        String l = "CHANNEL:" + submit.getOperatorId() + ":" + submit.getGatewayID();
        String spnumber = cacheFeign.hget(l, "spnumber");
        //ROUTER:6:0  ：  6:客户ID   0：运营商的类型ID
        // extendNumber（client_channel表）
        String s= "ROUTER:" + submit.getClientID() + ":" + submit.getOperatorId();
        //extendnumber
        String extendnumber = cacheFeign.hget(s, "extendnumber");
        submit.setSrcNumber(spnumber + extendnumber);
        //号段补全完成  进入一下过滤器
        return true;
    }
}
